[Looker] view_nameパラメータとfromパラメータの違いを理解する #looker
Lookerでは、モデル内のExplore名やExplore内のjoin名には一意制約があり、同じviewを指定るすとエラーになってしまいます。
このエラーを回避するためにview_nameパラメータとfromパラメータという2つのLookMLパラメータが用意されています。今回はこちらの2つのパラメータの動作の違いや利用シーン別のユースケースをご紹介します。
view_nameとfromパラメータの違い
users viewを1つだけ使って、以下の2つのExploreを定義しました:
explore: users {} explore: customer { view_name: users join: buyer { from: users sql_on: ${buyer.id} = ${users.id} ;; } }
一つ目のExploreはusers view単体で定義しています。
二つのめExploreもusers viewをベースビューにしたいのですが、同じExplore名は定義できないので、Explore名をcustomerにして、view_nameパラメータで参照するviewをusersに指定しています。
さらに、customer Exploreではusers viewをjoinしています。Explore内でも同じview名でjoinできないため、join名をbuyerにしてfromパラメータで参照するviewをusersに指定しています。
この定義でCustomer Explore画面はこのように表示されます:
まず、画面左のフィールドピッカーではBuyerとUsersのフィールドのセットが表示されています。
view_nameで参照するviewを指定した場合、ExploreのUI画面や生成されるSQL、そしてLookMLでの参照全てがview_nameで指定したview名になります。Explore名のみCustomerと表示されています。
対して、fromパラメータで指定した方はフィールドピッカーではBuyer、SQLでは"PUBLIC"."USERS" AS buyer
、LookMLでの参照も${buyer.column_name}
と、join時に定義した別名をもとに全てが機能します。
両者の動きの違いを確認したところで、各パラメータの利用シーンをご紹介します。
view_nameを使うケース
- Exploreをextendsする場合
Exploreをextendsする場合、拡張先でオブジェクト名が上書きされてしまうため、joinを定義している場合、参照できないviewがあるというエラーの原因になってしまいます。そのため、Exploreをextendsする際にはview_nameで明示的に参照するviewを指定しておく必要があります。
詳しくは下記記事の[Exploreでextendsを使う際の注意点]をご確認ください。
fromを使うケース
- 同一Explore内でjoinキーを変えて同じviewをjoinする時
Explore内で別々のキーで基のviewに対してjoinをする必要がある時があると思います。そういう場合には、LookMLの参照値を変えられるfromパラメータを利用して、同じviewでも別のオブジェクトのように扱えるfromパラメータを利用します。
まとめ
機能が似ていて使い分けが難しいview_nameパラメータとfromパラメータの違いと利用シーンをご紹介しました。